:art: Sync fields

huangqimin001 3 years ago
parent
commit
19a0efe763
1 changed files with 58 additions and 0 deletions
  1. 58 0
      commands/management/commands/sync_fields.py

+ 58 - 0
commands/management/commands/sync_fields.py

@@ -0,0 +1,58 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+import copy
4
+import logging
5
+
6
+from django_six import CompatibilityBaseCommand
7
+
8
+from registration.models import (CourseRegisterFieldInfo, CourseRegisterFieldPoolInfo, CourseRegisterInfo,
9
+                                 UserCourseRegisterInfo)
10
+
11
+
12
+logger = logging.getLogger('console')
13
+
14
+
15
+class Command(CompatibilityBaseCommand):
16
+    def handle(self, *args, **options):
17
+
18
+        logger.info('Hanyuan sync fields is dealing')
19
+
20
+        fields = CourseRegisterFieldPoolInfo.objects.all()
21
+        fields = {field.field_key: field.data for field in fields}
22
+        print('>>> CourseRegisterFieldPoolInfo: ', fields, '\n')
23
+
24
+        course_register_field_infos = CourseRegisterFieldInfo.objects.all()
25
+        for course_register_field_info in course_register_field_infos:
26
+            course_fields = course_register_field_info.fields
27
+            new_course_fields = [fields.get(field.get('key')) or field for field in course_fields]
28
+            print('>>> CourseRegisterFieldInfo: ', new_course_fields)
29
+            if course_fields != new_course_fields:
30
+                print('>>> CourseRegisterFieldInfo: Changed')
31
+                course_register_field_info.fields = new_course_fields
32
+                course_register_field_info.save()
33
+
34
+        course_register_infos = CourseRegisterInfo.objects.all()
35
+        for course_register_info in course_register_infos:
36
+            course_fields = course_register_info.fields
37
+            new_course_fields = [{**field, **fields.get(field.get('key'), {})} for field in course_fields]
38
+            print('>>> CourseRegisterInfo: ', new_course_fields)
39
+            if course_fields != new_course_fields:
40
+                print('>>> CourseRegisterInfo: Changed')
41
+                course_register_info.fields = new_course_fields
42
+                course_register_info.save()
43
+
44
+        user_course_register_infos = UserCourseRegisterInfo.objects.all()
45
+        for user_course_register_info in user_course_register_infos:
46
+            course_fields = user_course_register_info.fields
47
+            new_course_fields = []
48
+            for course_field in course_fields:
49
+                course_fields_fields = course_field.get('fields') or []
50
+                new_course_fields_fields = [{**field, **fields.get(field.get('key'), {})} for field in course_fields_fields]
51
+                new_course_field = copy.deepcopy(course_field)
52
+                new_course_field['fields'] = new_course_fields_fields
53
+                new_course_fields.append(new_course_field)
54
+            print('>>> UserCourseRegisterInfo: ', new_course_fields)
55
+            if course_fields != new_course_fields:
56
+                print('>>> UserCourseRegisterInfo: Changed')
57
+                user_course_register_info.fields = new_course_fields
58
+                user_course_register_info.save()